home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / helper / source / setup.asm < prev    next >
Assembly Source File  |  1991-10-18  |  3KB  |  137 lines

  1.     page    100, 132
  2.     title    ESR_setupInfo
  3. ;
  4. ;    int    ESR_setupInfo(char *out_buf);
  5. ;
  6. ;    機能
  7. ;        FMR-BIOS拡張サービスルーチン(Int 8EH)
  8. ;            システム情報の取得(Function 00H)を呼び出す
  9. ;
  10. ;    パラメタ
  11. ;        out_buf    : システム情報通知領域(200バイト)へのポインタ
  12. ;
  13. ;    復帰値
  14. ;        0 : 正常終了
  15. ;
  16. ;    アセンブル時には大文字/小文字識別オプション -twocase を指定すること
  17. ;        例    386asm setup -twocase
  18. ;
  19. ;    リンク時にはオプション -callbufs を指定すること
  20. ;        例    386link setup -callbufs 2
  21. ;
  22. ;    参考文献
  23. ;        FM-TOWNSテクニカルデータブック    pp.287~pp.289
  24. ;
  25.     .386p
  26. pmdata    segment    dword public use32 'DATA'
  27. pmdata    ends
  28. pmcode    segment    byte public use32 'CODE'
  29. pmcode    ends
  30.  
  31.     public    ESR_setupInfo
  32.     
  33.     assume    ds:pmdata
  34. pmdata    segment
  35. rmseg    dd    ?    ; 共有バッファのリアルモード用セグメント
  36. rmoff    dd    ?    ; 共有バッファのリアルモード用オフセット
  37. pmseg    dd    ?    ; 共有バッファのネイティブモード用セグメント
  38. pmoff    dd    ?    ; 共有バッファのネイティブモード用オフセット
  39. pmdata    ends
  40.  
  41.     assume    cs:pmcode
  42. pmcode    segment
  43.     db    'ESR_setupInfo',13
  44. ESR_setupInfo    proc    near
  45.  
  46. FUNCTION    equ    00h    ; Function 00H : システム情報の取得
  47. INT_NO        equ    8eh    ; 拡張サービスルーチン
  48. datasize    equ    200    ; 転送するデータのバイト数
  49.  
  50. #out_buf    equ    SS:[ebp+8]    ; C言語I/F第1パラメタアドレス
  51.  
  52.     enter    0, 0
  53.     cld
  54.     push    ds
  55.     push    es
  56.     push    esi
  57.     push    edi
  58.     push    ebx
  59.     push    ecx
  60.     call    mak_buffs        ; 共有バッファを確保
  61.     mov    ah, FUNCTION
  62. ;    mov    al, 入力パラメタ    ; ALへの設定情報は無し
  63.     mov    di, word ptr rmoff    ; DS:DIで通知領域を指定
  64.     push    dword ptr rmseg        ; ES
  65.     push    dword ptr rmseg        ; DS
  66.     push    dword ptr INT_NO
  67.     call    BIOS_call
  68.     add    esp, 12
  69.     mov    ecx, datasize        ; 共有バッファのバイト数をセット
  70.     push    ds
  71.     pop    es
  72.     mov    edi, #out_buf        ; 転送先をセット
  73.     mov    esi, dword ptr pmoff    ; 転送元をセット
  74.     mov    ds, word ptr pmseg
  75. rep    movsb                ; データを転送
  76.     movzx    eax, ah            ; BIOSコールの復帰値をAXへセット
  77.     pop    ecx
  78.     pop    ebx
  79.     pop    edi
  80.     pop    esi
  81.     pop    es
  82.     pop    ds
  83.     leave
  84.     ret
  85. ESR_setupInfo    endp
  86.  
  87. mak_buffs    proc    near
  88.     mov    ax, 250dh
  89.     int    21h
  90.     mov    word ptr rmoff, bx
  91.     shr    ebx, 16
  92.     mov    dword ptr rmseg, ebx
  93.     mov    dword ptr pmoff, edx
  94.     mov    ax, es
  95.     mov    word ptr pmseg, ax
  96.     ret
  97. mak_buffs    endp
  98.  
  99. RMINT    struc
  100. RMI_INUM    dw    ?
  101. RMI_DS        dw    ?
  102. RMI_ES        dw    ?
  103. RMI_FS        dw    ?
  104. RMI_GS        dw    ?
  105. RMI_EAX        dd    ?
  106. RMI_EDX        dd    ?
  107. RMINT    ends
  108.  
  109. BIOS_call    proc    near
  110. #INTNO    equ    (word ptr 8[ebp])
  111. #RMDS    equ    (word ptr 12[ebp])
  112. #RMES    equ    (word ptr 16[ebp])
  113. #RMI    equ    (dword ptr [ebp - (size RMINT)])
  114.     enter    0, 0
  115.     sub    esp, size RMINT
  116.     mov    #RMI.RMI_EAX, eax
  117.     mov    #RMI.RMI_EDX, edx
  118.     mov    ax, #RMDS
  119.     mov    #RMI.RMI_DS, ax
  120.     mov    ax, #RMES
  121.     mov    #RMI.RMI_ES, ax
  122.     mov    ax, #INTNO
  123.     mov    #RMI.RMI_INUM, ax
  124.     push    ds
  125.     mov    ax, ss
  126.     mov    ds, ax
  127.     lea    edx, #RMI
  128.     mov    ax, 2511h
  129.     int    21h
  130.     pop    ds
  131.     add    esp, size RMINT
  132.     pop    ebp
  133.     ret
  134. BIOS_call    endp
  135. pmcode    ends
  136.     end
  137.